#ifndef __BASE_H__
#define __BASE_H__

#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdio.h>
#include "common.h"

#ifdef __cplusplus
extern "C" {
#endif
/*------------------- C ----------------------*/

typedef union value_t
{
	int i[2];
	float f;
	double d;
	void *p;
	uint64_t u8;
	int64_t i8;
	const char* s;
} value_t;

typedef struct string_ref_t
{
	const char* base;
	int offset;
	int size;
} string_ref_t;

void init_string_ref(string_ref_t* ref, const char* buffer);

// simple
char* ref_to_string(const string_ref_t* ref);

bool ref_to_string_is_full(const string_ref_t* ref);

// safe
char* ref_to_mstring(const string_ref_t* ref);

char ref_char(const string_ref_t* ref, int index);

void* memdup(void* src, size_t size);

/*------------------- C ----------------------*/
#ifdef __cplusplus
}
#endif

#ifdef __cplusplus
/*------------------ C++ ---------------------*/

/*------------------ C++ ---------------------*/
#endif


#endif  // __BASE_H__
